package middleware

import (
	"bytes"
	"io"
	"log"

	"github.com/gin-gonic/gin"
)

// FeishuRawRequestLogger 飞书原始请求日志中间件
func RequestLogger() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 1. 读取原始请求体
		body, err := io.ReadAll(c.Request.Body)
		if err != nil {
			log.Printf("[FeiShu] 读取请求体失败: %v", err)
			c.Next()
			return
		}

		// 2. 将读取的 body 放回，以便后续处理器可以正常读取
		c.Request.Body = io.NopCloser(bytes.NewBuffer(body))

		// 3. 只记录原始数据（不进行任何解析）
		log.Printf("[body] ===== 收到原始请求数据 =====")
		log.Printf("[body] 请求路径: %s", c.Request.URL.Path)
		log.Printf("[body] 请求方法: %s", c.Request.Method)

		// 4. 打印原始请求体（只作为字符串和十六进制）
		log.Printf("[body] 原始请求体 (字符串):\n%s", string(body))
		// log.Printf("[body] 原始请求体 (十六进制):\n%x", body)

		log.Printf("[body] =====================")

		// 5. 继续处理请求
		c.Next()
	}
}
